﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using MySql.Data.MySqlClient;

namespace MakeIT.MiraPark.Negocios
{
    public static partial class ModelBO
    {

        public static TabelaMensalVO getTabelaMensal(int idTabelaMensal)
        {
            List<TabelaMensalVO> listTabelaMensalVOs = getTabelaMensals(idTabelaMensal, false);
            if (listTabelaMensalVOs != null && listTabelaMensalVOs.Count > 0)
                return listTabelaMensalVOs[0];
            else
                return null;
        }

        public static List<TabelaMensalVO> getTabelaMensals()
        {
            return getTabelaMensals(null, false);
        }

        public static List<TabelaMensalVO> getTabelaMensals(int? idTabelaMensal, bool ativo)
        {
            string where = "WHERE ";
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT tm.IdTabelaMensal, tm.IdHorario, h.Controle, tm.TabelaMensal, tm.InicioVigencia, tm.FimVigencia, tm.Valor ");
            query.AppendLine("FROM tabelamensal tm LEFT JOIN horario h on tm.IdHorario = h.IdHorario ");
            if (ativo)
            {
                query.AppendLine(where + " ?now BETWEEN tm.InicioVigencia and tm.FimVigencia ");
                where = "AND ";
            }
            if (idTabelaMensal != null)
            {
                query.AppendLine(where + "tm.IdTabelaMensal=?IdTabelaMensal ");
                where = "AND ";
            }
            query.AppendLine("ORDER BY tm.InicioVigencia DESC ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (ativo) cmd.Parameters.AddWithValue("?now", DateTime.Now);
            if (idTabelaMensal != null) cmd.Parameters.AddWithValue("?IdTabelaMensal", idTabelaMensal);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<TabelaMensalVO> listTabelaMensal = new List<TabelaMensalVO>();

                while (reader.Read())
                {
                    TabelaMensalVO tabelaMensalVO = TabelaMensalVO.CreateTabelaMensalVO();
                    tabelaMensalVO.idTabelaMensal = reader.GetInt32("IdTabelaMensal");
                    tabelaMensalVO.horarioVO.idHorario = reader.GetInt32("IdHorario");
                    tabelaMensalVO.horarioVO.controle = reader.GetString("Controle");
                    tabelaMensalVO.tabelaMensal = reader.GetString("TabelaMensal");
                    tabelaMensalVO.inicioVigencia = reader.GetDateTime("InicioVigencia");
                    tabelaMensalVO.fimVigencia = reader.GetDateTime("FimVigencia");
                    tabelaMensalVO.valor = reader.GetDecimal("Valor");

                    listTabelaMensal.Add(tabelaMensalVO);
                }
                reader.Close();
                return listTabelaMensal;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setTabelaMensal(TabelaMensalVO tabelaMensalVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE tabelamensal ");
            query.AppendLine("SET IdTabelaMensal=?IdTabelaMensal, IdHorario=?IdHorario, TabelaMensal=?TabelaMensal, InicioVigencia=?InicioVigencia, FimVigencia=?FimVigencia, Valor=?Valor ");
            query.AppendLine("WHERE IdTabelaMensal=?IdTabelaMensal ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdTabelaMensal", tabelaMensalVO.idTabelaMensal);
            cmd.Parameters.AddWithValue("?IdHorario", tabelaMensalVO.idHorario);
            cmd.Parameters.AddWithValue("?TabelaMensal", tabelaMensalVO.tabelaMensal);
            cmd.Parameters.AddWithValue("?InicioVigencia", tabelaMensalVO.inicioVigencia);
            cmd.Parameters.AddWithValue("?FimVigencia", tabelaMensalVO.fimVigencia);
            cmd.Parameters.AddWithValue("?Valor", tabelaMensalVO.valor);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static long newTabelaMensal(TabelaMensalVO tabelaMensalVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO tabelamensal ");
            query.AppendLine("SET IdHorario=?IdHorario, TabelaMensal=?TabelaMensal, InicioVigencia=?InicioVigencia, FimVigencia=?FimVigencia, Valor=?Valor ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdHorario", tabelaMensalVO.idHorario);
            cmd.Parameters.AddWithValue("?TabelaMensal", tabelaMensalVO.tabelaMensal);
            cmd.Parameters.AddWithValue("?InicioVigencia", tabelaMensalVO.inicioVigencia);
            cmd.Parameters.AddWithValue("?FimVigencia", tabelaMensalVO.fimVigencia);
            cmd.Parameters.AddWithValue("?Valor", tabelaMensalVO.valor);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delTabelaMensal(TabelaMensalVO tabelaMensalVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM tabelamensal ");
            query.AppendLine("WHERE IdTabelaMensal=?IdTabelaMensal ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdTabelaMensal", tabelaMensalVO.idTabelaMensal);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
    }
}
